vim.g.mapleader = " "
vim.g.maplocalleader = " "

-- 保存本地变量
local keymap = vim.keymap
local opt = {noremap = true, silent = true }

-- 之后就可以这样映射按键了
-- map('模式','按键','映射为XX',opt)
-- <CR> = enter

-- ---------- 插入模式 ---------- ---
keymap.set("i", "jk", "<ESC>l")
keymap.set("i", "<leader>q", "<ESC>:q!<CR>")
keymap.set("i", "<leader>wq", "<ESC>:wq<CR>")
keymap.set("i", "<leader>w", "<ESC>:w!<CR>")

-- 跳到行首行尾 Jump to the end of the first line
keymap.set('i', '<C-h>', '<Esc>I', opt)
keymap.set('i', '<C-l>', '<Esc>A', opt)

-- ---------- 视觉模式 ---------- ---
keymap.set('v', ';', ':')
-- 单行或多行移动
keymap.set("v", "J", ":m '>+1<CR>gv=gv")
keymap.set("v", "K", ":m '<-2<CR>gv=gv")
-- 缩进
keymap.set('v', '<', '<gv', opt)
keymap.set('v', '>', '>gv', opt)

-- ---------- 正常模式 ---------- ---
-- 按键替换
keymap.set("n", ";", ":",opt)

-- 窗口
keymap.set("n", ",v", ":vsp<CR>", opt) -- 水平新增窗口 Horizontal new window
keymap.set("n", ",h", ":sp<CR>", opt) -- 垂直新增窗口 Vertical new window
keymap.set("n", ",c", "<C-w>c", opt) -- 关sc 关闭当前分屏 Close current split screen  (s = close)
keymap.set("n", ",o", "<C-w>o", opt) -- so 关闭其他分屏 Close other split screens (o = other)

-- 比例控制（不常用，因为支持鼠标拖拽）
keymap.set("n", ",>", ":vertical resize +20<CR>", opt)
keymap.set("n", ",<", ":vertical resize -20<CR>", opt)
keymap.set("n", ",=", "<C-w>=", opt)
keymap.set("n", ",J", ":resize +10<CR>",opt)
keymap.set("n", ",K", ":resize -10<CR>",opt)

-- 窗口之间跳转
keymap.set("n", ",h", "<C-w>h", opt)
keymap.set("n", ",j", "<C-w>j", opt)
keymap.set("n", ",k", "<C-w>k", opt)
keymap.set("n", ",l", "<C->l", opt)

-- 取消高亮
keymap.set("n", "??", ":noh<CR>")
keymap.set("n", "<leader>nh", ":noh<CR>")

-- 上下滚动浏览(Scroll up and down)
keymap.set('n', '<C-U>', '4j', opt)
keymap.set('n', '<C-D>', '4k', opt)

-- 修改 Ctrl-u 和 Ctrl-d 的移动幅度 从默认的移动半瓶改为移动 9 行
keymap.set("n", "<C-u>", "9k", opt)
keymap.set("n", "<C-d>", "9j", opt)

-- H 移动到行首(Move to the beginning of the line)，L 移动到行尾(Move to end of line)
keymap.set('n', 'H', '^', opt)
keymap.set('n', 'L', 'g_', opt)

-- 删除从当前字符到结尾的内容
keymap.set('n', 'dl', 'd$', opt)
-- 删除从当前字符到开始的内容
keymap.set('n', 'dh', 'd^', opt)

-- 切换buffer
keymap.set("n", "<C-l>", ":bnext<CR>")
keymap.set("n", "<C-h>", ":bprevious<CR>")


-- 退出 quit
keymap.set('n', 'q', ':q<CR>', opt)
keymap.set('n', 'qq', ':q!<CR>', opt)
keymap.set('n', 'Q', ':qa!<CR>', opt)